/*
 * @lc app=leetcode.cn id=739 lang=cpp
 *
 * [739] 每日温度
 */

#include <limits.h>

#include <iostream>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <vector>
using namespace std;

// @lc code=start
class Solution {
   public:
    vector<int> dailyTemperatures(vector<int>& temperatures) {
        int length = temperatures.size();
        vector<int> result(length, 0);
        stack<int> st;          // 由下标组成的单调栈

        for (int i = 0; i < length; i++) {
            // 栈为空，直接入栈
            if (st.empty()) {
                st.push(i);
                continue;
            }

            // 如果当前元素大于栈顶元素，弹出栈顶元素
            while (!st.empty() && temperatures[i] > temperatures[st.top()]) {
                result[st.top()] = i - st.top();
                st.pop();
            }
            
            st.push(i);
        }

        while (!st.empty()) {
            int top = st.top();
            st.pop();
            result[top] = 0;
        }
        
        return result;
    }
};
// @lc code=end
